package cn.oppexecise;

import java.io.*;
import java.util.Scanner;

/**
 * @author SWJ
 * @create 2021-06-17 17:12
 * 本类用于拓展练习文件复制案例
 */
public class TestCopyFile {
    public static void main(String[] args) {
        System.out.println("请输入源文件路径");
        String f = new Scanner(System.in).nextLine();
        //复制的东西
        System.out.println("请输入目录文件路径：");
        String t = new Scanner(System.in).nextLine();
        //复制到哪里地方

        //调用使用字符流复制文件的方法，传入刚刚接收到的两个参数
        ZfCopy(f, t);

    }

    /**
     * 创建一个使用字符流复制文件的方法,复制两个流对象
     */
    private static void ZfCopy(String f, String t) {
        //1.定义在整个方法都生效的局部变量，注意手动初始化 值为NULL
        Reader in = null;
        Writer out = null;
        //代码会抛出异常，所以完成try-catch-finally方法
        try {
            //3.1创建高效字符输入流，传入的参数是目标文件的路径
            in = new BufferedReader(new FileReader(f));
            //3.2传入的参数是目标文件复制到哪里路径
            out = new BufferedWriter(new FileWriter(t));
            //定义变量记录读到的数据
            int b;
            //循环读取目标文件，直到返回值为-1，没有数据时循环结束
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            System.out.println("恭喜文件复制成功");
        } catch (Exception e) {
            System.out.println("复制失败");
        } finally {
            /**关流顺序 最后的流最先关闭 最前的流最后关闭
             * 分开关闭*/
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
